00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef FRQTPAT_HPP
00011 #define FRQTPAT_HPP
00012 #include "gridpack/component/data_collection.hpp"
00013 #include "gridpack/parser/dictionary.hpp"
00014 #include "gridpack/utilities/string_utils.hpp"
00015 namespace gridpack {
00016 namespace parser {
00017 template <class _data_struct> class FrqtpatParser
00018 {
00019 public:
00020
00021
00022
00023 explicit FrqtpatParser()
00024 {
00025 }
00026
00027
00028
00029
00030 virtual ~FrqtpatParser()
00031 {
00032 }
00033
00034
00035
00036
00037
00038
00039
00040 void extract(_data_struct &data_struct,
00041 gridpack::component::DataCollection *data)
00042 {
00043 double rval;
00044 int ival, r_id;
00045 bool bval;
00046 std::string stmp;
00047
00048 if (!data->getValue(RELAY_NUMBER,&ival)) {
00049 ival = 0;
00050 data->addValue(RELAY_NUMBER, ival+1);
00051 } else {
00052 data->setValue(RELAY_NUMBER, ival+1);
00053 }
00054 r_id = ival;
00055
00056
00057 if (!data->getValue(RELAY_MODEL,&stmp,r_id)) {
00058 data->addValue(RELAY_MODEL, data_struct.model, r_id);
00059 } else {
00060 data->setValue(RELAY_MODEL, data_struct.model, r_id);
00061 }
00062
00063
00064 if (!data->getValue(RELAY_GENID,&stmp,r_id)) {
00065 data->addValue(RELAY_GENID, data_struct.tag, r_id);
00066 } else {
00067 data->setValue(RELAY_GENID, data_struct.tag, r_id);
00068 }
00069
00070
00071 if (!data->getValue(RELAY_MINS,&ival,r_id)) {
00072 data->addValue(RELAY_MINS, data_struct.mins, r_id);
00073 } else {
00074 data->setValue(RELAY_MINS, data_struct.mins, r_id);
00075 }
00076
00077
00078 if (!data->getValue(RELAY_FREBUS,&ival,r_id)) {
00079 data->addValue(RELAY_FREBUS, data_struct.frebus, r_id);
00080 } else {
00081 data->setValue(RELAY_FREBUS, data_struct.frebus, r_id);
00082 }
00083
00084
00085 if (!data->getValue(RELAY_FL,&rval,r_id)) {
00086 data->addValue(RELAY_FL, data_struct.fl, r_id);
00087 } else {
00088 data->setValue(RELAY_FL, data_struct.fl, r_id);
00089 }
00090
00091
00092 if (!data->getValue(RELAY_FU,&rval,r_id)) {
00093 data->addValue(RELAY_FU, data_struct.fu, r_id);
00094 } else {
00095 data->setValue(RELAY_FU, data_struct.fu, r_id);
00096 }
00097
00098
00099 if (!data->getValue(RELAY_TP,&rval,r_id)) {
00100 data->addValue(RELAY_TP, data_struct.tp, r_id);
00101 } else {
00102 data->setValue(RELAY_TP, data_struct.tp, r_id);
00103 }
00104
00105
00106 if (!data->getValue(RELAY_TB,&rval,r_id)) {
00107 data->addValue(RELAY_TB, data_struct.tb, r_id);
00108 } else {
00109 data->setValue(RELAY_TB, data_struct.tb, r_id);
00110 }
00111 }
00112
00113
00114
00115
00116
00117
00118
00119
00120 void parse(std::vector<std::string> &split_line,
00121 gridpack::component::DataCollection *data)
00122 {
00123 double rval;
00124 int nstr = split_line.size();
00125 int ival, r_id;
00126
00127
00128 if (!data->getValue(RELAY_NUMBER,&ival)) {
00129 ival = 0;
00130 data->addValue(RELAY_NUMBER, ival+1);
00131 } else {
00132 data->setValue(RELAY_NUMBER, ival+1);
00133 }
00134 r_id = ival;
00135
00136
00137 std::string stmp, model;
00138 gridpack::utility::StringUtils util;
00139 model = util.trimQuotes(split_line[1]);
00140 util.toUpper(model);
00141 if (!data->getValue(RELAY_MODEL,&stmp,r_id)) {
00142 data->addValue(RELAY_MODEL, model.c_str(), r_id);
00143 } else {
00144 data->setValue(RELAY_MODEL, model.c_str(), r_id);
00145 }
00146
00147
00148 if (nstr > 4) {
00149 model = util.clean2Char(split_line[4]);
00150 if (!data->getValue(RELAY_GENID,&stmp,r_id)) {
00151 data->addValue(RELAY_GENID, model.c_str(), r_id);
00152 } else {
00153 data->setValue(RELAY_GENID, model.c_str(), r_id);
00154 }
00155 }
00156
00157
00158 if (nstr > 1) {
00159 if (!data->getValue(RELAY_MINS,&ival,r_id)) {
00160 data->addValue(RELAY_MINS, atoi(split_line[0].c_str()), r_id);
00161 } else {
00162 data->setValue(RELAY_MINS, atoi(split_line[0].c_str()), r_id);
00163 }
00164 }
00165
00166
00167 if (nstr > 2) {
00168 if (!data->getValue(RELAY_FREBUS,&ival,r_id)) {
00169 data->addValue(RELAY_FREBUS, atoi(split_line[2].c_str()), r_id);
00170 } else {
00171 data->setValue(RELAY_FREBUS, atoi(split_line[2].c_str()), r_id);
00172 }
00173 }
00174
00175
00176 if (nstr > 5) {
00177 if (!data->getValue(RELAY_FL,&rval,r_id)) {
00178 data->addValue(RELAY_FL, atof(split_line[5].c_str()), r_id);
00179 } else {
00180 data->setValue(RELAY_FL, atof(split_line[5].c_str()), r_id);
00181 }
00182 }
00183
00184
00185 if (nstr > 6) {
00186 if (!data->getValue(RELAY_FU,&rval,r_id)) {
00187 data->addValue(RELAY_FU, atof(split_line[6].c_str()), r_id);
00188 } else {
00189 data->setValue(RELAY_FU, atof(split_line[6].c_str()), r_id);
00190 }
00191 }
00192
00193
00194 if (nstr > 7) {
00195 if (!data->getValue(RELAY_TP,&rval,r_id)) {
00196 data->addValue(RELAY_TP, atof(split_line[7].c_str()), r_id);
00197 } else {
00198 data->setValue(RELAY_TP, atof(split_line[7].c_str()), r_id);
00199 }
00200 }
00201
00202
00203 if (nstr > 8) {
00204 if (!data->getValue(RELAY_TB,&rval,r_id)) {
00205 data->addValue(RELAY_TB, atof(split_line[8].c_str()), r_id);
00206 } else {
00207 data->setValue(RELAY_TB, atof(split_line[8].c_str()), r_id);
00208 }
00209 }
00210 }
00211
00212
00213
00214
00215
00216
00217 void store(std::vector<std::string> &split_line,_data_struct &data)
00218 {
00219
00220 int o_idx;
00221 o_idx = atoi(split_line[3].c_str());
00222 data.bus_id = o_idx;
00223
00224 std::string sval;
00225 gridpack::utility::StringUtils util;
00226 sval = util.trimQuotes(split_line[1]);
00227 util.toUpper(sval);
00228
00229
00230 strcpy(data.model, sval.c_str());
00231 int nstr = split_line.size();
00232
00233
00234 if (nstr > 4) {
00235 sval = util.clean2Char(split_line[4]);
00236 strcpy(data.tag, sval.c_str());
00237 }
00238
00239
00240 if (nstr > 1) {
00241 data.mins = atoi(split_line[0].c_str());
00242 }
00243
00244
00245 if (nstr > 2) {
00246 data.frebus = atoi(split_line[2].c_str());
00247 }
00248
00249
00250 if (nstr > 5) {
00251 data.fl = atof(split_line[5].c_str());
00252 }
00253
00254
00255 if (nstr > 6) {
00256 data.fu = atof(split_line[6].c_str());
00257 }
00258
00259
00260 if (nstr > 7) {
00261 data.tp = atof(split_line[7].c_str());
00262 }
00263
00264
00265 if (nstr > 8) {
00266 data.tb = atof(split_line[8].c_str());
00267 }
00268 }
00269 };
00270 }
00271 }
00272 #endif